Kustomize 是K8s SIGs的子專案
他的好用之處在於可以像Docker-compose一樣定義很多個Services
但是Kustomize
基於K8s, 可以讓namespace下面跑的pods, ingresses都一目了然
甚至你可以使用Overlays將部署環境(alpha, beta, production..)做區隔
在Mac上面妳可以很簡單的安裝
brew install kustomize
至於其他的OS可以參考Kustomize的Install.md
就像以下這張圖
kustomization.yaml 就是在下 kustomize build指令時會根據resource去抓你的檔案
通常會有deployment & service兩種檔案
這兩種檔案就是為你建一個Workload, 再幫你Expose對其他pods的端口
也可以再加上Ingress, 但是我這邊選擇第一次apply之後手動加上去
就不用再多弄出一個ingress檔案
而這是我的
deployment.yaml
service.yaml
kustomization.yaml
將它們放在你的專案根目錄底下
例如我的資料夾目錄長這樣
輸入
cd kustomize/base
kustomize build .
kustomize就會生成deployment.yaml還有service.yaml
這時候再輸入
kubectl apply --server=$${Your k8s cluster server} --token=$${Your k8s apply token} --insecure-skip-tls-verify=true --namespace=$${Your k8s name space} -f -
就可以建立workloads了
如果有使用Rancher就可以看到服務跑起來的狀況
如果你是要更新現有的workloads, 遇到這款問題
這就是創建的pod template hash label跟你Deployment不符合,所以K8s不讓你更新
我之前是直接用Rancher UI去幫我創建workloads,所以就遇到這個問題
解決方法是直接砍掉,用kubectl command創建新的Workloads。
.drone.yml寫法請參考這裡
我的做法是:
kustomize edit set image {{your remote image}}
跑完這個指令就可以把docker image換成最新的
然後再利用Kustomize生成部署文件
Kustomize edit 還可以玩很多請看這裡
最後Deploy時會用到drone secret
Drone secret非常方便,能夠直接以環境變數的方式在跑Pipeline時寫進去
但是也有能夠被print出來的問題
所幸在Drone 可以限制哪個Repository, image可以存取這個Drone secret(怎麼限制)
+++同場加映: Drone 1.0要如何get secret
部署完之後,就會開始思考環境的事情
這時候就可以善用base/overlays
請看以下這兩張圖:
這是你的檔案目錄會有的樣子:
基本上我第一次看的時候也沒有看得很懂...XD
後來才知道Overlays是把裡面有的Tags附加在base上面
或是把base有的Tags換掉
這是我的檔案樹, 或許會比較清楚
根據環境的不同,Deploy的時候就要到那個環境的資料夾底下下Kustomize指令
這是production的Kustomize
可以看到我根據base資料夾的yaml file還額外requires kafka-consumer-env-prod.yaml
這是production的kafka-consumer-env-prod.yaml
可以看到我這邊把Replicas代換成3
還額外增加了兩個process enviroment variables給這個Workloads